$(function(){

// Напоминание о выборе строки
	function selRowPlease() {
		app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите строку в таблице.", 'app-icon-stop32');
	}
	function selOnePlease() {
		app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите только одну строку в таблице.", 'app-icon-stop32');
	}
	function selArtPlease() {
		app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите изделие.", 'app-icon-stop32');
	}
	
    function ProdStock(area_id, caller) {
		var area = $('#'+area_id);
		var vdiv = area_id+'Tab';
		var me = this;

		area.html('<div id="'+vdiv+'Pager"></div><table id="'+vdiv+'"></table>');

		var pager_id = '#' + vdiv + 'Pager';
        var pager = $(pager_id);
		
        var el_art_id;
        var el_art_code;
        var el_art_full_name;
        var art_code = '';
		var el_met_name;
		
		var edit_div = 'div#editmod' + vdiv;
        var gritab;
        var col_order = [0, 1, 2, 3, 4, 5, 6];
        var col_names = ['ID', 'Прод.ID', 'Шифр', 'Полное описание', 'Кол.', 'Ед.', 'Примечание' ];
        var col_model = [
		    { name: 'id', index: 'prs_id', hidden: true, width: 1, editable: false, fixed: true 
			},
		    { name: 'prs_art_id', index: 'prs_art_id', hidden: true, width: 1, editable: true, 
                editoptions: { dataInit: function (el) { el_art_id = el; } } 
			}, 					
		    { name: 'art_code', index: 'art_code', hidden: false, width: 100, editable: true, 
                editoptions: { maxlength: "16", style: "width:250px;", dataInit: function (el) { el_art_code = el; }}, 
				formoptions: { label: '<div class="jqg-form-label">Шифр</div>'}
			},					
		    { name: 'art_full_name', index: 'art_full_name', hidden: false, width: 500, sortable: false, 
                editable: true, edittype: 'textarea', editoptions: { maxlength: "255", disabled: 'true',  
				style: "white-space:normal; width:252px; height:50px; resize:none;", dataInit: function (el) { el_art_full_name = el; }}, 
				formoptions: { label: '<div class="jqg-form-label">Описание изделия</div>'} 
			},					
		    { name: 'prs_amount', index: 'prs_amount', hidden: false, width: 50, 
				editable: true, sortable: false, search: false,
                editoptions: { maxlength: "6", style: "width:250px;" }, 
				formoptions: { label: '<div class="jqg-form-label">Количество</div>'} 
			},					
		    { name: 'met_name', index: 'met_name', hidden: false, width: 40, editable: true, sortable: false, search: false,
		        editoptions: { maxlength: "16", disabled: 'true', style: "width:250px;", dataInit: function (el) { el_met_name = el; } },
				formoptions: { label: '<div class="jqg-form-label">Метрика</div>'}
		    },			
		    { name: 'prs_comment', index: 'prs_comment', hidden: false, width: 200, 
				editable: true, sortable: false, search: false,
		        editoptions: { maxlength: "128", style: "width:250px;" },
				formoptions: { label: '<div class="jqg-form-label">Примечание</div>'}
		    }			
        ];
        var jqgo = {
            url: 'index.php',
            editurl: 'index.php',
            datatype: 'json',
            postData: { q: 'prodstock/index' },
            emptyrecords: true,
            autowidth: false,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 25,
            multiboxonly: true,
            mtype: 'POST',
            shrinkToFit: false,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 15,
            rowList: [10, 40, 100],
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: area.innerHeight() - 75,
            width: area.innerWidth() - 2,
            sortname: 'art_code',
            sortorder: 'asc',
            sortable: true,
            caption: '',
            loadError: function (xhr, status, error) {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                switch( data.userdata.errcode ) {
                    case 0:
                        break;
                    case 99:    
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32', caller.Close );
                        break;
                    default:
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32' );
                        break;
                }                
            },
            ondblClickRow: onEditClick
        };

// Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

// Индикация серверных ошибок добавления, ред., удал.
        function responseOnSubmit(response, postdata) {
            var rsp = $.parseJSON(response.responseText);
            var success = true;
            var msg = '';

            if (rsp.errcode) return [false, rsp.errmess];
				
            return [success, msg];
        }


// Редактирование
        function onEditClick() { 
			var rowarr = gritab.getGridParam('selarrrow');
			if( rowarr.length == 0 ) { selRowPlease(); return; }
			if( rowarr.length > 1 ) { selOnePlease(); return; }
				
			gritab.jqGrid('editGridRow', rowarr[0], {
				width: 400,
				resize: false,
                modal: true,
                jqModal: true,
				zIndex: app.ui_dialog_min_z_index+1,
                editData: { q: 'prodstock/update' },
				onInitializeForm: function( fm ) {
					$(fm).prepend('<style type="text/css">.ui-autocomplete {max-width:262px;}</style>'); 
				},
                afterShowForm: function(fm) {
					$(fm).find("input#art_code").prop('disabled', true);
					$(fm).find("input#prs_amount").focus();
					$(edit_div).css({'overflow':'visible'}).shadow();					
				},
                afterSubmit: responseOnSubmit,
                viewPagerButtons: false,
                closeAfterEdit: true,
				onClose: function(fm) {
					$(fm).find("input#art_code").prop('disabled', false);
				}
			});
		}

// Навигатор - создаем панель инструментов
        gritab.jqGrid('navGrid', pager_id, {
				add:false,del:false,edit:false,view:false,search:false,refresh:false });
        
// Пользовательский навигатор - создать
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Добавить',
            title: 'Создать запись',
            buttonicon: 'ui-icon-plus',
            onClickButton: function() { 
				gritab.jqGrid('editGridRow', 'new', {
					width: 400,
					resize: false,
                    modal: true,
                    jqModal: true,
					zIndex: app.ui_dialog_min_z_index+1,
                    editData: { q: 'prodstock/insert' },
					onInitializeForm: function( fm ) {
						$(fm).prepend('<style type="text/css">.ui-autocomplete {max-width:262px;}</style>'); 
					},
                    afterShowForm: function(fm) {
						SetArtHack();
						$(edit_div).css({'overflow':'visible'}).shadow();
					},
                    afterSubmit: responseOnSubmit,
                    closeAfterAdd: false,
					onClose: function() {
						$(el_art_code).autocomplete( "destroy" ).unbind();
					}
				});
			}
        });

// Пользовательский навигатор - редактирование
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Изменить',
            title: 'Редактировать выбранную запись',
            buttonicon: 'ui-icon-pencil',
            onClickButton: onEditClick,
        });
		
// Пользовательский навигатор - удаление
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Удалить',
            title: 'Удаление выбранной записи',
            buttonicon: 'ui-icon-trash',
            onClickButton: function() { 
				var rowarr = gritab.getGridParam('selarrrow');
				var rowlist = rowarr.toString();
				if( !rowlist ) { selRowPlease(); return; }
				gritab.jqGrid('delGridRow', rowlist, {
                    modal: true,
                    jqModal: true,
                    width: 250,
					msg: '<table style="width:240px;margin-top:16px;"><tr><td style="width:50px;">'+
							'<div class="app-icon-quest32"></div></td><td>Удалить выбранную запись(и) ?</td></tr></table>',
					resize: false,
					zIndex: app.ui_dialog_min_z_index+1,
                    closeOnEscape: true,
                    delData: { q: 'prodstock/delete' },
                    afterShowForm: function() { $('div#delmod' + vdiv).shadow(); },
                    afterSubmit: responseOnSubmit
				});
			}
        });
// Пользовательский навигатор - просмотр
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: 'Просмотр',
            title: 'Показать в виде формы',
            buttonicon: 'ui-icon-document',
            onClickButton: function() { 
				var rowlist = gritab.getGridParam('selarrrow');
				if( rowlist.length == 0 ) { selRowPlease(); return; }
				if( rowlist.length > 1 ) { selOnePlease(); return; }
				gritab.jqGrid('viewGridRow', rowlist[0], {
					width: 400,
					resize: true,
                    modal: true,
                    jqModal: true,
					zIndex: app.ui_dialog_min_z_index+1,
                    closeOnEscape: true,
                    viewPagerButtons: false,
					labelswidth: '35%',
					beforeShowForm: function(fm) {
//						$(fm).find("#v_art_full_name span").css('white-space','normal');
						$(fm).find("table:first td").css({'white-space':'normal','vertical-align':'top'});
						$('div#viewmod' + vdiv).shadow(); 
					}
				});
			}
        });
		
// Пользовательский навигатор - обновить
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: 'Обновить',
			title: 'Обновить таблицу',
			buttonicon: 'ui-icon-refresh',
			onClickButton: function() { gritab.trigger("reloadGrid"); }
		});    

// Пользовательский навигатор - Отгрузка
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: 'Отгрузка',
			title: 'Отгрузка готовой продукции',
			buttonicon: 'ui-icon-cart',
			onClickButton: InvShip
		});    

// Пользовательский навигатор - Поступления
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: 'Поступления',
			title: 'Все поступления по указазанному изделию',
			buttonicon: 'ui-icon-arrow-1-s',
			onClickButton: function() {
				var rowarr = gritab.getGridParam('selarrrow');
				if( rowarr.length == 0 ) { selRowPlease(); return; }
				if( rowarr.length > 1 ) { selOnePlease(); return; }
				
				var row = gritab.getRowData( rowarr[0] );
				
				ShowProdIn( row.prs_art_id, row.art_code);
			}
		});    

// Делаем ширину панели кнопок максимальной
		$('td#'+area_id+'TabPager_center').width(2);
		
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

        function SetArtHack() {
            $(el_art_code).autocomplete({
				html: true,
				appendTo: edit_div,
                source: function (request, responce) {
                    $.post('index.php', { q: 'articles/find', term: request.term },
                    function (rsp, textStatus) {
 						if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
                        if (rsp.errcode) {
                            if (rsp.errcode == '999') { alert(rsp.errmess); }
                            else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
                            responce();
                            return;
                        }
                        if (rsp.data) {
                            responce($.map(rsp.data, function (item) {
                                return { label: item.art_code + ' ( '+item.art_full_name+' )',
										value: item.art_code, 
										art_id: item.art_id, 
										art_code: item.art_code, 
										art_full_name: item.art_full_name,
										met_name: item.met_name
									}
                            }));
                            return;
                        }
                        responce();
                    }, 
                    'json');
                },
                minLength: 2, autoFocus: true,
                focus: function (event, ui) { return false; },
                select: function (event, ui) {
                    $(el_art_id).val(ui.item.art_id);
                    $(el_art_code).val(ui.item.art_code.replace(/<(b|\/b)>/g,''));
                    $(el_art_full_name).val(ui.item.art_full_name.replace(/<(b|\/b)>/g,''));
                    art_code = $(el_art_code).val();
                    $(el_met_name).val(ui.item.met_name);
                    return false;
                }
            });
            art_code = $(el_art_code).val();
            $(el_art_code).bind( 'focusout', function () { 
                if( $(el_art_code).val() != art_code ) { 
                    art_code = '';
                    $(el_art_id).val('');
                    $(el_art_code).val('');
                    $(el_art_full_name).val('');					
                    $(el_met_name).val('');
                }
            });            
        }

		this.Destroy = function() {
			gritab.GridDestroy(vdiv);
			area.empty();
		};
		
		this.Resize = function() {
			gritab.setGridWidth( area.innerWidth() - 2 );
			gritab.setGridHeight( area.innerHeight() - 75 );
		};
		
		this.Refresh = function() {
			gritab.trigger("reloadGrid");
		};

    };  // End of ProdStock function definition


	function InvShip() {
		var prs_id = 0;
		    
        function ProdTab(area_id, caller ) {
			var area = $('#'+area_id);
			var vdiv = area_id+'Tab';
    
			area.html('<table id="'+vdiv+'"></table>');
    
            var gritab;
            var col_names = ['ID', 'Шифр', 'Полное описание', 'К-во', 'Ед.', "Примечание" ];
            var col_model = [
			    { name: 'prs_id', index: 'prs_id', hidden: true, width: 1, editable: false, fixed: true, sorttype:'int' },
			    { name: 'art_code', index: 'art_code', hidden: false, width: 80, editable: false, sorttype:'text' },					
			    { name: 'art_full_name', index: 'art_full_name', hidden: false, width: 300, editable: false, sorttype:'text' },					
			    { name: 'prs_need', index: 'prs_need', hidden: false, width: 60, editable: false, align: 'right', sorttype:'int' }, 
			    { name: 'met_name', index: 'met_name', hidden: false, width: 60, editable: false, align: 'left', sorttype:'text' }, 
			    { name: 'prs_comment', index: 'prs_comment', hidden: false, width: 150, editable: false, align: 'left', sorttype:'text' } 
            ];    
            var jqgo = {
                datatype: 'clientSide',
                autowidth: false,
                gridview: false,
                colNames: col_names,
                colModel: col_model,
                rowNum: 1000,
                loadui: 'disable',
                filterbar: false,
                shrinkToFit: true,
                width: $('#'+area_id).innerWidth() - 2,
                height: $('#'+area_id).innerHeight() - 26,
                sortname: 'art_code',
                sortorder: 'asc',
                sortable: true,
                caption: '',
                multiselect: true,
                multiselectWidth: 25,
                multiboxonly: true,
				onSelectRow: function( id, st, e ) {
					if( st ) {
					}
				}
            };
			
			// Создадим jqGrid
            gritab = $('#' + vdiv).jqGrid(jqgo);
			
			this.Destroy = function() {
				gritab.GridDestroy(vdiv);
				area.empty();
			};
			this.Resize = function() {
				gritab.setGridWidth( area.innerWidth() - 2 );
				gritab.setGridHeight( area.innerHeight() - 26 );
			};
			this.getSelected = function() {
				return gritab.getGridParam('selarrrow');
			}
			this.delSelected = function() {
				var ids = gritab.getGridParam('selarrrow');
				var ilen = ids.length;
				if( ilen == 0 ) { selRowPlease(); return; }
				for( var i=ilen; i>0; i-- ) gritab.delRowData( ids[i-1] );
			}
			this.addRowData = function( id, data ) { gritab.addRowData( id, data ); }	// Добавить строку
			this.setRowData = function( id, data ) { gritab.setRowData( id, data ); }	// Устновить новые данные в строке ( необязательно все)
			this.delRowData = function( id ) { gritab.delRowData( id ); }				// Удалить строку
			this.getRowData = function( id ) { return gritab.getRowData( id ); }		// Получить содержимое строки
			this.getDataIDs = function() { return gritab.getDataIDs(); }				// Получить идентификаторы всех строк или пустой массив
			this.getRowCount = function() { return gritab.reccount; }					// Узнать количество строк
			this.getCol = function( name ) { return gritab.getCol( name, true ); }		// Возв.массив [ {id:rowid,value:clval},...]
        
		}  // End of create ManPlan function definition
    
    
        function CreateDialog(dlgID) {
            var oTab;
            var aldlg = $('#' + dlgID);

			var inv_print = false;
			var delivery = false;
       
            if ($('#' + dlgID + 'Tab').length) return;
			
			var me = this;
			aldlg.dialog(
			{
				modal: false, title: 'Отгрузка готовой продукции',
				height: 560, width: 650, minHeight:560, minWidth:650,
				closeOnEscape: true,
				autoOpen: false,
				resizable: true,
				resize: function( e, ui ) { 
					oTab.Resize(); 
				},
				open: function () { 
					aldlg.load('index.php', {q:'prodstock/invshipform'}, createDialogContent );
					$('div[aria-describedby="' + dlgID + '"]').shadow(); 
				},
				beforeClose: function () {
					if( inv_print && !delivery ) {
						app.confirm('AlertDlg', 'Требуется подтверждение', "Вы выполнили печать накладной но "+
									"не провели отгрузку. Закончить ?",	'app-icon-stop32', 
									function() {
										delivery = true;
										aldlg.dialog('close');
									}, 
						'');
						return false;
					}
					return true;
				},
				close: function () {
					aldlg.find("#invship_inv_date").datepicker( "destroy" ).unbind();
					aldlg.find("#invship_inv_tdate").datepicker( "destroy" ).unbind();
					if (oTab) oTab.Destroy();
					aldlg.empty();
					aldlg.dialog("destroy");
				}
			});
    
			this.Close = function() { aldlg.dialog('close'); };
			aldlg.dialog('open');
			
			function createDialogContent() {
				// Дерево
				var dtree = aldlg.find("#invship_prod_list");
				var oDtree, rootNode;
				// Кнопки
				var ins = aldlg.find("#invship_prod_insert");
				var del = aldlg.find("#invship_prod_delete");
				var rep = aldlg.find("#invship_prod_report");
				var doi = aldlg.find("#invship_prod_doing");
				var clo = aldlg.find("#invship_prod_close");
				// Поля формы
				var invnm = aldlg.find("#invship_inv_num");
				var invdt = aldlg.find("#invship_inv_date");
				var invfr = aldlg.find("#invship_inv_from");
				var invrc = aldlg.find("#invship_inv_rcpt");
				var invtd = aldlg.find("#invship_inv_tdate");
				var invtn = aldlg.find("#invship_inv_tnum");
				var invfp = aldlg.find("#invship_inv_fpers");
				var invrp = aldlg.find("#invship_inv_rpers");
				// Поля таблицы
				var code = aldlg.find("#invship_prod_code");
				var exist = aldlg.find("#invship_prod_exist");
				var need = aldlg.find("#invship_prod_need");
				var metnm = aldlg.find("#invship_prod_metnm");
				var desc = aldlg.find("#invship_prod_descrip");
				var comm = aldlg.find("#invship_prod_comment");
				
				// Устанавливаем свойства			
				$.ui.dynatree.nodedatadefaults["icon"] = false;
    
				code.prop('readonly', true);
				exist.prop('readonly', true);
				desc.prop('readonly', true);
				
				// Получить список изделий
				dtree.dynatree({
					clickFolderMode: 1,
					initAjax: {
						url: "index.php",
						data: { q: "prodstock/prodlist" }
					},
					onCreate: function(node, nodeSpan) {
						if( typeof node.data.errcode != 'undefined' ) {
                            app.alert('AlertDlg', 'Ошибка', node.data.errmess, 'app-icon-stop32', me.Close );					
						}
					},
					onClick: function(node, event) {
						// Hack for leaf expanding too 
						if( node.hasChildren() && node.getEventTargetType(event) == "title"){ node.toggleExpand(); }
						return true;
					},			
					onActivate: function(node) {
						prs_id = node.data.key;
						code.val(node.data.title);
						exist.val(node.data.exist);
						need.val('');
						metnm.text(node.data.met_name);
						desc.val(node.data.description);
						comm.val(node.data.comment);
					}
				});
				
				// Получим координаты дерева
				oDtree = dtree.dynatree("getTree");
				rootNode = dtree.dynatree("getRoot");
				
				// Создадим пока пустой список выдачи
				oTab = new ProdTab("invship_prod_model", me);
    
				// Обработчики кнопок
				
				// Привяжем календарь к полю даты накладной и доверенности
				invdt.datepicker({
					dateFormat: "dd.mm.yy",
					changeMonth: true,
					changeYear: true
				});

				invtd.datepicker({
					dateFormat: "dd.mm.yy",
					changeMonth: true,
					changeYear: true
				});

				invdt.attr("title", "Формат ввода: 'дд.мм.гггг'");                
				invtd.attr("title", "Формат ввода: 'дд.мм.гггг'");                
				
				// Добавить изделие в список
				ins.button({icons:{primary: "ui-icon-arrowthick-1-s"}});
				ins.click(function() { 
					if( prs_id == 0 || code.val() == '' || desc.val() == '' || need.val() == '' ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', 'Пожалуйста. Выберите изделие и укажите его количество.', 'app-icon-stop32');
						return false;
					}
					
					need.val( need.val().replace(/,/,'.') );
					var amt = Number(need.val());
					if( amt <= 0 || !$.isNumeric(need.val()) ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', 'Неправильно указано количество.', 'app-icon-stop32');
						return false;
					}
    
					if( amt > Number(exist.val()) ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', 'На складе содержится изделие в недостаточном количестве.', 'app-icon-stop32');
						return false;
					}
    
					var ids = oTab.getDataIDs();
					for( var i=0; i<ids.length; i++) {
						if( ids[i] == prs_id ) {
							app.alert('AlertDlg', 'Опс-с-с !!!', 'Это изделие уже включено в список.', 'app-icon-stop32');
							return false;
						}
					}
					oTab.addRowData( prs_id, { prs_id:prs_id, art_code:code.val(), art_full_name:desc.val(), 
							prs_need:amt, met_name:metnm.text(), prs_comment:comm.val() } );
				});
			
				// Изъять изделие
				del.button({icons:{primary: "ui-icon-arrowthick-1-n"}});
				del.click( function() {	oTab.delSelected(); } );
				
				// Сформировать накладную
				rep.button({icons:{primary: "ui-icon-document"}});
				rep.click(function() {
					var rone;
					var ids = oTab.getDataIDs();
					if( !ids.length ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', "Вы не сформировали 'Список изделий для отгрузки'.", 'app-icon-stop32');
						return;
					}
					if( !invnm.val() || !invdt.val() || !invfr.val() || !invrc.val() ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', "Поля: 'Номер','Дата','Поставщик','Получатель' обязательны для заполнения.", 'app-icon-stop32');
						return;
					}
					var fpost = dlgID+'_PostForm';
					aldlg.append('<form id="'+fpost+'" style="display:none" target="invship" method="post" '+
								'action="index.php?q=prodstock/invshiprep"></form>');
					$('#'+fpost).append('<input name="invnm" value="'+invnm.val()+'">');
					$('#'+fpost).append('<input name="invdt" value="'+invdt.val()+'">');
					$('#'+fpost).append('<input name="invfr" value="'+invfr.val()+'">');
					$('#'+fpost).append('<input name="invrc" value="'+invrc.val()+'">');
					$('#'+fpost).append('<input name="invtd" value="'+invtd.val()+'">');
					$('#'+fpost).append('<input name="invtn" value="'+invtn.val()+'">');
					$('#'+fpost).append('<input name="invfp" value="'+invfp.val()+'">');
					$('#'+fpost).append('<input name="invrp" value="'+invrp.val()+'">');
					for( var i=0; i<ids.length; i++) {
						rone = oTab.getRowData(ids[i]);
						$('#'+fpost).append('<input name="ids[]" value="'+ids[i]+'">');
						$('#'+fpost).append('<input name="art_code[]" value="'+rone.art_code+'">');
						$('#'+fpost).append('<input name="art_full_name[]" value="'+rone.art_full_name+'">');
						$('#'+fpost).append('<input name="prs_need[]" value="'+rone.prs_need+'">');
						$('#'+fpost).append('<input name="met_name[]" value="'+rone.met_name+'">');
						$('#'+fpost).append('<input name="prs_comment[]" value="'+rone.prs_comment+'">');
					}
					window.open(null, 'invship', 'location=0,status=0,toolbar=0,menubar,resizable,scrollbars,height=600,width=700');
					$('#'+fpost).submit();
					$('#'+fpost).remove();
					inv_print = true;
				});
				
				// Списать изделия со склада
				doi.button({icons:{primary: "ui-icon-check"}});
				doi.click(function() {
					var prs = oTab.getCol('prs_need');
					if( !inv_print ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', "Вы не выполнили печать накладной.", 'app-icon-stop32');
						return;
					}
					if( !prs.length ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', "Вы не сформировали 'Список изделий для отгрузки'.", 'app-icon-stop32');
						return;
					}
					if( !invnm.val() || !invdt.val() || !invfr.val() || !invrc.val() ) {
						app.alert('AlertDlg', 'Опс-с-с !!!', "Поля: 'Номер','Дата','Поставщик','Получатель' обязательны для заполнения.", 'app-icon-stop32');
						return;
					}
					
					$.post('index.php', { q: 'prodstock/delivery', inv_num:invnm.val(), inv_date:invdt.val(), prs:prs } )
					.done( function (rsp, textStatus) {
						if( typeof rsp != 'object' ) rsp = $.parseJSON(rsp);
						if (rsp.errcode) {
							if (rsp.errcode == '999') { alert(rsp.errmess); return; }
							app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'app-icon-stop32');
						}
						else {
							app.alert('AlertDlg', 'Информация', "Списание продукции со склада выполнено.", 'app-icon-info32');
							delivery = true;
							aldlg.dialog('close');
							app.ProdStock.Refresh();
						}
					})
					.fail( function() {
						app.alert('AlertDlg', 'Ошибка', "Ошибка взаимодействия с сервером. Повторите попытку.", 'app-icon-stop32');
					});
				});
				
				clo.button({icons:{primary: "ui-icon-close"}});
				clo.click(function() { aldlg.dialog('close'); } );

			}
        }
		
		CreateDialog('InvShipDlg');
	}

    function ProdIn(area_id, caller, art_id) {
		var area = $('#'+area_id);
		var vdiv = area_id+'Tab';
		var me = this;

		area.html('<div id="'+vdiv+'Pager"></div><table id="'+vdiv+'"></table>');

		var pager_id = '#' + vdiv + 'Pager';
        var pager = $(pager_id);
		
        var gritab;
        var col_names = ['ID', 'Дата', 'Количество', 'Единицы' ];
        var col_model = [
		    { name: 'id', index: 'prod_id', hidden: true, width: 1, editable: false, fixed: true },
			{ name: 'prod_tostock', index:'prod_tostock', width:120, editable: false },         
		    { name: 'prod_num', index: 'prod_num', width: 80, editable: false, sortable: false, search: false },					
		    { name: 'met_name', index: 'met_name', width: 60, editable: false, sortable: false, search: false }						
        ];
        var jqgo = {
            url: 'index.php',
            datatype: 'json',
            postData: { q: 'prodstock/listin', art_id: art_id },
            emptyrecords: true,
            autowidth: false,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            mtype: 'POST',
            shrinkToFit: true,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 15,
            rowList: [10, 40, 100],
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: area.innerHeight() - 75,
            width: area.innerWidth() - 2,
            sortname: 'prod_tostock',
            sortorder: 'desc',
            sortable: true,
            caption: '',
            loadError: function (xhr, status, error) { alert("Ошибка загрузки даных"); },
            loadComplete: function (data) {
                switch( data.userdata.errcode ) {
                    case 0: break;
                    case 99:    
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32', caller.Close );
                        break;
                    default:
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32' );
                        break;
                }                
            },
        };

// Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

// Навигатор - создаем панель инструментов
        gritab.jqGrid('navGrid', pager_id, {
				add:false,del:false,edit:false,view:false,search:false,refresh:false });
        
// Делаем ширину панели кнопок максимальной
		$('td#'+area_id+'TabPager_center').width(2);
		
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

// Прикрепить календарь к ячейке поиска
		BindCalendar( $("#gview_"+vdiv+" tr.ui-search-toolbar"), $("#gview_" + vdiv + " #gs_prod_tostock") );
		
        function BindCalendar(fm, el) {
            $(el).datepicker({
				onClose: function(dt, inst) {				
					if( $(fm).hasClass('ui-search-toolbar') && dt != '' ) gritab[0].triggerToolbar();
				},
                dateFormat: "dd.mm.yy",
                showOn: "button",
                buttonImage: "img/calendar2.png",
                buttonImageOnly: true,
                buttonText: "Календарь",
                changeMonth: true,
                changeYear: true
            });

            fm.find(".ui-datepicker-trigger")
                .css({ 'cursor': 'pointer', 'position': 'relative', 'left': '-18px', 'top': '3px' });
            $(el).attr("title", "Формат ввода: 'дд.мм.гггг'");                
        }

		this.Destroy = function() {
			$("#gview_" + vdiv + " #gs_prod_tostock").datepicker( "destroy" ).unbind();
			gritab.GridDestroy(vdiv);
			area.empty();
		};
		this.Resize = function() {
			gritab.setGridWidth( area.innerWidth() - 2 );
			gritab.setGridHeight( area.innerHeight() - 75 );
		};
		this.Refresh = function() {
			gritab.trigger("reloadGrid");
		};
	}
	
    function ShowProdIn(art_id, art_code) {
        var oTab;
		var dlgID = 'ProdInDlg';
        var aldlg = $('#' + dlgID);
		var me = this;

        if ($('#' + dlgID + 'Tab').length) return;

        aldlg.dialog(
        {
            modal: false, title: 'Поступления на склад изделия '+art_code,
            height: 400, width: 270,
			closeOnEscape: true,			
            autoOpen: false,
            open: function () { 
				oTab = new ProdIn(dlgID, me, art_id);
				$('div[aria-describedby="' + dlgID + '"]').shadow() 
			},
            close: function () {
                if (oTab) oTab.Destroy();
                aldlg.dialog("destroy");
            }
        });

		this.Close = function() { aldlg.dialog('close'); };

        aldlg.dialog('open');
    }
	
	function ProdStockProxy() {
		var oTab, area;
		var active = false;
		
		this.Open = function( area_id ) {
			if( active  ) return;
			area = area_id;
			$('#'+area+'Title').show();
			oTab = new ProdStock( area_id, this ); 
			$(window).bind( 'resize', oTab.Resize );
			active = true;
		};
		this.Close = function() { 
			if( !active  ) return;
			$(window).unbind( 'resize', oTab.Resize );
			oTab.Destroy();
			$('#'+area+'Title').hide();
			active = false;
		};
		this.Resize = function() { oTab.Resize(); };
		this.Refresh = function() { oTab.Refresh(); };
	}
	
	app.ProdStock = new ProdStockProxy();
	
    // ---------------------------------------------------------------------------
});
